<?php
/**
 * @author chenshubo
 * 小小宝供应商订单
 */
namespace App\Service\OrderService\OrderRouteService;

use App\Service\Code\Normal;
use App\Model\PssModel\OrderSupplier;
use Service\AppService\IdService;
use App\Service\VendorClient\ShopxxbApi\ShopXxbApiClient;
use App\Service\OrderService\BaseSupplierRouterService;

class Shopxxb extends BaseSupplierRouterService 
{

    /**
     * 创建订单
     * @param array $param
     * @return mixed
     */
    public function createOrder( $param = [] ) 
    {
        //下单商品重组
        $supplierGoodsInfo  = $param['supplierGoodsInfo'];
        $userGoodsList      = $supplierGoodsInfo['userGoodsList'];
        $goodsList          = $supplierGoodsInfo['goodsList'];
        $orderItems         = [];
        
        //按照仓区进行拆单
        $defaultStockGroupGoodsList = [];
        foreach ($goodsList as $item ) {
            $defaultStockGroupGoodsList[$item['defaultStock']][] = $item;
            unset($item);
        }
        
        //下游是否申报
        $isDelare = (
            (isset($param['order']['isOrderDeclare']) && $param['order']['isOrderDeclare'] == 1) ||
            (isset($param['order']['isPayDeclare']) && $param['order']['isPayDeclare'] == 1)
            ) ? true : false;
        //是否云仓商城
        $isShop = isset($param['order']['isSplitOrder']) && $param['order']['isSplitOrder'] == 1 ? true : false ;        
        
        foreach ($defaultStockGroupGoodsList as $item )
        {
            $currentGoods = current($item);
            $supplierCommodityType = $currentGoods['supplierCommodityType'];
            
            //重新合并每一个仓库商品
            $orderGoods = [];
            foreach ($item as $goods ) {
                $orderGoods = array_merge($orderGoods,$userGoodsList[$goods['skuCode']]);
                unset($goods);
            }
            
            //生成供应商主单号
            $supplierCode = $param['supplierGoodsInfo']['supplierCode'];
            $param['order']['supplier_psn'] = OrderSupplier::instance()->getCreateOrderSn($supplierCode);
            $param['order']['supplier_csn'] = IdService::instance()->getOtherID();
        
            //防止订单号重复问题,下游已申报，则使用下游的订单号作为中台子单号
            if( $isDelare && !$isShop && $supplierCommodityType != GOODS_TYPE_YBMY ) {
                $param['order']['supplier_dsn'] = $param['order']['orderSn'];
            } else {
                $param['order']['supplier_dsn'] = IdService::instance()->getOtherID();
            }
        
            $param['order']['goods'] = $orderGoods;
            $res = OrderSupplier::instance()->getSupplierCreateOrderData($param);
            if( $res['code'] != Normal::SUC ) {
                return $res;
            }
            $orderItems[] = $res['data'];
        }
        
        return Normal::returnCode(Normal::SUC,"获取成功",[
            'supplierCode' => $supplierCode,
            'orderItems' => $orderItems
        ]);
    }

    /**
     * 订单支付
     * @param array $param
     * @return mixed
     */
    public function orderPay( $param = [] ) 
    {
        return $this->callSdkApi(ShopXxbApiClient::class,$param['apiBody'])->createOrder($param);
    }
    
    /**
     * 订单取消
     * @param array $param
     * @return mixed
     */
    public function orderCancel( $param = [] ) 
    {
        return Normal::returnCode(Normal::SUC,"处理完成");
    }

    /**
     * 订单售后
     * @param array $param
     * @return mixed
     */
    public function orderAfterSale( $param = [] ) 
    {
        return $this->callSdkApi(ShopXxbApiClient::class,$param['apiBody'])->cancelOrder($param);
    }
}